home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / pc / BEERSRC.ZIP / INTRO.C < prev    next >
Encoding:
C/C++ Source or Header  |  1993-12-27  |  2.5 KB  |  132 lines

  1.  
  2. // Intro [c] Alpha-Helix 1992
  3. // written by Dany Schoch
  4.  
  5. #pragma warn -stu
  6. #pragma hdrstop
  7.  
  8. #include <dos.h>
  9. #include <mem.h>
  10.  
  11. #include "xmode.h"
  12. #include "sound.h"
  13. #include "fileman.h"
  14. #include "baller.h"
  15.  
  16.  
  17. #define SCROLLY            311
  18.  
  19. #define BYTESPERLINE        80
  20. #define SCREENSIZE        28000
  21. #define selectwrite(plane)      outport(0x3c4, (plane << 8) | 0x02)
  22.  
  23. static int loadEGA(char *file)
  24. {
  25.    char  *data;
  26.    int   dataptr;
  27.    int   count, i, page;
  28.    char  far *scrptr;
  29.  
  30.  
  31.    data = loadfile(datapool, file);
  32.    dataptr = 0;
  33.  
  34.    for (page = 1; page<=8; page <<= 1) {
  35.       selectwrite(page);
  36.       scrptr = MK_FP(0xa000, 0);
  37.       while (FP_OFF(scrptr) < SCREENSIZE) {
  38.      count = data[dataptr++];
  39.      if (count < 128) {
  40.         for (i = 0; i <= count; i++) {
  41.            *scrptr = data[dataptr];
  42.            scrptr++;
  43.         }
  44.         dataptr++;
  45.      } else {
  46.         for (i = 0; i <= count - 128; i++) {
  47.            *scrptr = data[dataptr++];
  48.            scrptr++;
  49.         }
  50.      }
  51.       }
  52.    }
  53.    selectwrite(0x0f);
  54.    unloadfile(data);
  55.  
  56.    return 0;
  57. }
  58.  
  59.  
  60. static void putpaper(int c, int s, char *paper)
  61. {
  62.    int   i;
  63.    char  far *ptr;
  64.    char  far *data;
  65.  
  66.    c -= 32;
  67.    data = &paper[(c*5+s)*40];
  68.    ptr = MK_FP(0xa000, (SCROLLY+1)*BYTESPERLINE - 1);
  69.  
  70.    for (i = 0; i < 40; i++) {
  71.       *ptr = *data;
  72.       data++;
  73.       ptr += BYTESPERLINE;
  74.    }
  75.  
  76. }
  77.  
  78. static void paperscroll(void)
  79. {
  80.  
  81.    movedata(0xa000, SCROLLY*BYTESPERLINE + 1,
  82.         0xa000, SCROLLY*BYTESPERLINE, 39*BYTESPERLINE);
  83. }
  84.  
  85.  
  86. void intro(void)
  87. {
  88.    char   *paper;
  89.    struct sndstrc *snd;
  90.  
  91.    screenmode(0x10);            // Switch to 640x350 mode.
  92.    setattrib(1);
  93.    setvanillapalette(0);
  94.    snd_cli();
  95.    loadEGA("blick.pak");
  96.    paper = loadfile(datapool, "paper.fnt");
  97.    snd_sti();
  98.    snd = loadfile(datapool, "blick.snd");
  99.    playloop(snd);
  100.    glowto(63, 63, 63);
  101.    glowin(1);
  102.  
  103.    {
  104.       int  l, c;
  105.       char text[] =
  106.      " . . . ALPHA HELIX PRODUCTION. (C) COPYRIGHT 1993.   "
  107.      "PROGRAMMING, SOUND FX AND LEVEL DESIGN BY TRITONE.   "
  108.      "GRAPHICS AND FONTS BY TWEETY.   "
  109.      "ADDITIONAL PROGRAMMING AND MUSIC BY ZYNAX OF DARK SYSTEM.   ";
  110.  
  111.       c = 0; l = 0;
  112.       do {
  113.      putpaper(text[c], l, paper);
  114.      if (++l > 4) { l = 0; c++; }
  115.      if (text[c] == 0) c = 0;
  116.      retrace();
  117.      paperscroll();
  118.       } while (!pressedkeys);
  119.    }
  120.    haltsound();
  121.    unloadfile(snd);
  122.    unloadfile(paper);
  123.  
  124.    glowout();
  125.  
  126. // All this mode switching is a little bit a 'murks'. I know.
  127.    setxmode();                // Switch back to X mode.
  128.    setstandardpalette();
  129. }
  130.  
  131.  
  132.